/*
  计数质数
  说明
    给定整数 n ，返回所有小于等于非负整数 n 的质数的数量。（ 0 <= n <= 5 * 10^6 ）
  输入格式
    一个整数 n
  输出格式
    小于等于 n 的质数的个数
  样例
    输入数据 1
      10
    输出数据 1
      4
*/

#include <bits/stdc++.h>

using namespace std;

int a[5000002] = {1, 1}; // a[i] 表示整数 i 表示是否是质数: 0 表示是质数，1 表示非质数(合数)

int main() {
    int n;
    cin >> n;

    /* 埃氏筛除法核心代码 */
    for (int i = 2; i <= sqrt(n); i++) { // 注意: 对于质数 i，从 i*i 开始筛! 因此如果 n小于 i*i, 则循环退出!
        // 当 i 是质数的时候，执行筛除操作
        if (a[i] == 0) {
            for (int j = i * i; j <= n; j += i) { // 从 i*i 开始筛，筛掉质数 i 的倍数
                a[j] = 1;  // 筛除 j (即标记 a[j] 为非质数)
            }
        }
    }

    // 根据筛除操作后的结果，统计剩余质数的个数
    int num = 0;
    for (int i = 2; i <= n; i++) {
        if (a[i] == 0) {
            num++;
        }
    }
    cout << num;

    return 0;
}